package com.easyplan.planningresultreciver.domain;

import com.alibaba.fastjson.annotation.JSONField;

public class PlanningScore {

    /**
     * 当前分数对应约束的名称
     */
    @JSONField(ordinal = 1)
    private String constraintName;

    /**
     * 分数层次，表示当前分数层于所在的分数类型的哪个层次，该字段值越小，表示分数越重要，引擎在做方案选择时，会优先考虑。
     * 例如，用两个软分别代表工单交付期达成情况和机台使用率高低，若前者（交期达成率）的分数层次值越小，表示该约束越重要。
     * 引擎在做规划优化时，会先唯分数层次较小的约束优先符合。
     * 取值L HARD_0, HARD_1, SOFT_0等，表示一个分数属于哪个种类的第几层
     *
     * 分数层镒还可以表示出分类类型的含义：
     * 以HARD开头为硬分，代表硬约束的，表示必须遵守的规则，若有硬约束被打破，表示当前规划方案不是可行方案。
     * 例如：将一个不任务分给一个不能加工它的资源上。
     * 例如： HARD_1, 表示硬约束的第二层分数，具体这个分数代表什么约束，可以从constraintName获得，只要这个分数非0，就表示至少存在1个任务违反了该约束
     *       出现有HARD开头的分数对象，即表示该方案已经是非可行方案
     *
     * 以SOFT开头为软分，代表软约束的分数， 表示应该尽可能住宿的规则，软约束被打破得越少，方案越佳
     * 例如： 用一个软分代表一个方案中，加工所有任何的时间长度，时间越长，表示资源利用率越低，则表现为这个软分值越大。
     * 例如： SOFT_0，表示软约束的第一层分数，具体这个分数代表什么约束，可以从constraintName获得，只要这个分数非0，就表示至少存在1个任务违反了该约束。
     *       一个方案中出现有SOFT开头的分数对象，并不代表方案不可行，但越少SOFT开头的分对象，代表被违反的软约束越少；
     *       出现SOFT开头的分数对象时，分值越高，表示越多对应的软约束被违反。软约束通用作为优化目标使用。
     *       同一个规划对象的多次规划出来的多个方案，软约束分值越低接近0，代表方案质量越高；但不同待排对象的方案，不能通过软约束分的高低衡量优劣。
     */
    @JSONField(ordinal = 2)
    private String scoreLevel;

    /**
     * 分值。
     * 因为是扣分值，因此，分数越大，表示扣得越多，即表示当前分数所代表的约束被违反得越严重。
     * 最值的分值是0，即该分数代码的约束完全符合
     */
    @JSONField(ordinal = 3)
    private Long scoreValue;

    /**
     * 当前分数对应的约束说明
     */
    @JSONField(ordinal = 4)
    private String constraintDesc;

    public String getConstraintName() {
        return constraintName;
    }

    public void setConstraintName(String constraintName) {
        this.constraintName = constraintName;
    }


    public String getScoreLevel() {
        return scoreLevel;
    }

    public void setScoreLevel(String scoreLevel) {
        this.scoreLevel = scoreLevel;
    }

    public Long getScoreValue() {
        return scoreValue;
    }

    public void setScoreValue(Long scoreValue) {
        this.scoreValue = scoreValue;
    }

    public String getConstraintDesc() {
        return constraintDesc;
    }

    public void setConstraintDesc(String constraintDesc) {
        this.constraintDesc = constraintDesc;
    }
}
